using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.Infra.Common;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Cliente;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Translator.DataContractToModel
{
    /// <summary>
    /// Traduz um contrato de dados em um modelo
    /// </summary>
    public class Cliente
    {
		public Cliente(){}

		/// <summary>
        /// ToCliente
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
		public Model.Cliente ToCliente(ClienteResponse from)
        {
            Model.Cliente retorno = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Cliente();

            if (from == null || !from.Codigo.HasValue)
                return null;

            retorno.AdministradoConcorrente = from.IsAdministradoConcorrente;
            retorno.Apelido = from.Apelido;
            retorno.Broker = from.ClienteBroker;
            retorno.Codigo = from.Codigo;
            
            retorno.CodigoClienteInstitucional = from.CodigoClienteInstitucional;
            retorno.ComplementoNome = from.ComplementoNome;
            retorno.Digito = from.DigitoVerificador;
            retorno.Nome = from.Nome;
            retorno.NomeResumido = from.NomeResumido;
            retorno.NomeBroker = from.Nome;
            retorno.ClienteBroker = from.isClienteBroker;
            retorno.OperaCarteiraPropria = from.isOperacaoCarteiraCliente;
            retorno.PercentualCorretagemPrincipal = from.PercentualReducaoAcrescimo;
            retorno.PercentualCorretagemTotal = from.PercentualTotal;
            retorno.PessoaVinculada = from.isPessoaVinculada;
            retorno.Qualificado = from.isClienteQualificado;
            
            switch (from.Situacao.Value)
            {
                case TipoSituacao.Ativo:
                    retorno.Situacao = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoSituacao.Ativo;
                    break;
                case TipoSituacao.Inativo:
                    retorno.Situacao = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoSituacao.Inativo;
                    break;                
            }

            retorno.CodigoAssessor = from.CodigoAssesor;
            retorno.CodigoCustodiante = from.CodigoCustodiante;
            retorno.CodigoGrupo = from.CodigoGrupo;

            switch (from.TipoPessoa)
            {
                case TipoPessoa.Fisica:
                    retorno.TipoPessoa = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoPessoa.Fisica;
                    break;
                case TipoPessoa.Juridica:
                    retorno.TipoPessoa = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoPessoa.Juridica;
                    break;
            }            

            return retorno;
		}

		/// <summary>
        /// ToCliente - LIST
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
		public ModelCollection<Model.Cliente> ToCliente(List<ClienteResponse> from){

            ModelCollection<Model.Cliente> lista = new ModelCollection<Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Cliente>();
            Model.Cliente item = null;

            if (from == null)
                return null;

            foreach (ClienteResponse inLista in from)
            {
                item = this.ToCliente(inLista);
                lista.Add(item);
            }

            return lista;
		}

		/// <summary>
        /// ToEmissor
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
		public Model.Emissor ToEmissor(EmissorOrdemResponse from)
        {
            Model.Emissor retorno = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Emissor();

            if (from == null)
                return null;

            retorno.Nome = from.NomeEmissor;
                      
            return retorno;
		}

		/// <summary>
        /// ToEmissor - LIST
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
		public ModelCollection<Model.Emissor> ToEmissor(List<EmissorOrdemResponse> from)
        {
            ModelCollection<Model.Emissor> lista = new ModelCollection<Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Emissor>();
            Model.Emissor item = null;

            if (from == null)
                return null;

            foreach (EmissorOrdemResponse inLista in from)
            {
                item = this.ToEmissor(inLista);
                lista.Add(item);
            }

            return lista;
		}
	}
}